/***
 *
 *  This class manages the scheduler settings.  The 
 *  Menu_Manager is the frontal interface while this
 *  plays a role in saving the settings the user
 *  changes for the simulation.
 *
 ***/

#ifndef SCHEDULER_H 
#define SCHEDULER_H 

#include <iostream>
#include <cstdlib>
#include "print_buffer.h"
#include "generic_scheduler.h"
#include "scheduler_mfqs.h"
#include "scheduler_rts.h"
#include "scheduler_hws.h"

using namespace std;

enum scheduler_type {MFQS, RTS, HWS};

class Scheduler {

	public:
		Scheduler (Print_Buffer *);
		virtual ~Scheduler ();

		void settings_menu (); 
		void print_settings ();
		void run (string);

	private:
		int list_options ();
		void do_option (int, bool *);
		void menu_mfqs ();
		void menu_rts ();
		void menu_hws ();

		Print_Buffer * pb;
		scheduler_type choice;
		Generic_Scheduler * gs;

		// RTS Options
		bool is_soft;

		// MFQS Options
		int num_queues;
		int max_queues;
		int time_quantum_base;
		int age_time;

		// HWS Options
		int time_quantum;
};

#endif
